會用 bash 撰寫 if
之後,接著我們來嘗試撰寫迴圈
bash script 的 while 迴圈範例寫法如下
count=1
while [[ "$count" -le 5 ]]; do
echo $count
count=$((count + 1))
done
運作起來的效果如下
./test
1
2
3
4
5
如果是對程式撰寫有一定經驗的讀者,應該會想到,既然有 while 的迴圈方式,一般來說,應該也會有 for 的迴圈方式
沒錯!bash script 的 for 迴圈範例寫法如下
#!/bin/bash
for (( i=1; i <= 5; i=i+1 )); do
echo $i
done
效果跟 while 迴圈是一樣的。
說了這麼多。 這一些撰寫 bash script 的技能,有沒有實際用到的地方呢?
有的!舉個例子來說,後端 PHP 開發非常知名的框架 Laravel,就善用了 bash script 的技巧,讓整個專案安裝的時候更加的便利!
我們來看看 Laravel 官方教學的安裝方式:
curl -s "https://laravel.build/example-app" | bash
curl
會下載檔案,然後透過 |
指令將下載的內容送到 bash
指令內運作。不過 "https://laravel.build/example-app"
裡面的內容是什麼呢?
我們直接連進 https://laravel.build/example-app 看看內容
docker info > /dev/null 2>&1
# Ensure that Docker is running...
if [ $? -ne 0 ]; then
echo "Docker is not running."
exit 1
fi
docker run --rm \
--pull=always \
-v "$(pwd)":/opt \
-w /opt \
laravelsail/php81-composer:latest \
bash -c "laravel new example-app && cd example-app && php ./artisan sail:install --with=mysql,redis,meilisearch,mailhog,selenium "
cd example-app
./vendor/bin/sail pull mysql redis meilisearch mailhog selenium
./vendor/bin/sail build
CYAN='\033[0;36m'
LIGHT_CYAN='\033[1;36m'
WHITE='\033[1;37m'
NC='\033[0m'
echo ""
if sudo -n true 2>/dev/null; then
sudo chown -R $USER: .
echo -e "${WHITE}Get started with:${NC} cd example-app && ./vendor/bin/sail up"
else
echo -e "${WHITE}Please provide your password so we can make some final adjustments to your application's permissions.${NC}"
echo ""
sudo chown -R $USER: .
echo ""
echo -e "${WHITE}Thank you! We hope you build something incredible. Dive in with:${NC} cd example-app && ./vendor/bin/sail up"
fi
我們逐步分析這段 bash script 看看。
首先,透過 docker info > /dev/null 2>&1
運作 docker
。不過,我們需要的不是輸出內容,而是是否能成功運作。如果不能,則輸出錯誤訊息 「"Docker is not running."」。
如果可以,那麼就利用 docker 運作 laravelsail/php81-composer:latest
這個影像檔,並在建立好的容器內執行 laravel new example-app && cd example-app && php ./artisan sail:install --with=mysql,redis,meilisearch,mailhog,selenium
。這樣可以避免掉使用者電腦環境的不同,導致程式下載可能出現的問題。
接著,進到專案資料夾內(cd example-app
),利用 Laravel Sail 來部署專案:
./vendor/bin/sail pull mysql redis meilisearch mailhog selenium
./vendor/bin/sail build
接著,用 if
判斷目前的用戶是不是 su
,如果不是的話,要求輸入密碼,並且執行 sudo chown -R $USER: .
。
最後輸出成功訊息:「Thank you! We hope you build something incredible. Dive in with: cd example-app && ./vendor/bin/sail up」
利用這些指令,Laravel 讓整個安裝流程,幾乎全部透過預先寫好的指令執行,減少使用者操作失誤的可能性,並且也減輕了安裝環境的負擔。
今天有關 bash script 的部分,就分享到這邊,明天是最後一天了!